#!/bin/bash
#---------------HEADER--------------------------------------------------------------------|
#AUTOR:
# Jefferson Rocha <lrcjefferson@gmail.com>
#
#PROGRAMA:
# M4L - Music for life.
#
#DESCRIÇÃO:
# Tocador de música completo via CLI, utilizando o mpg123 como base.
# Tem como objetivo ser simples/minimalista e agradável, fácil de usar.
#
#LICENSE
# M4L is licensed under the GNU Lesser/Library General Public License, LGPL, version 2.1
# mpg123  is licensed under the GNU Lesser/Library General Public License, LGPL, version 2.1
#
#CHANGELOG:
# (Versão 1.0b) - Jefferson Rocha
#  -Lançado programa em versão beta
#
# (Versão 1.1) - Jefferson Rocha
#  -Arrumado e melhorado Cabeçalho
#  -Adicionado função de verificação de parâmetro nulo
#  -Adicionado ajuda em linha.
#  -Adicionado parâmetro --stereo no mpg123
#  -Adicionado parâmetro -C (controle keys) no mpg123
#  -Trocado sáida de erro /dev/null por 2>&- no tocador mpg123
#  -Adicionado Animação (Espectrum) enquanto toca a música.
#  -Adicionado função para centralizar logo de acordo com a tela.
#  -Retirado subtitulo que ficava após o logo.
#  -Retirado váriaveis (mover e mover_sub).
#-----------------------------------------------------------------------------------------|

#-----------------------(VÁRIAVEIS GLOBAIS DO PROGRAMA)

# Configurações--!
programa="M4L Player V1.1"
TOCADOR="mpg123 --title --stereo -C" # tocador
# Testes--!
mpg_existe=$(which mpg123)
# Cores--!
bold="\033[1m"
a="\033[36;40;1m"      # cor legenda/opções
f="\033[m"	           # fecha cores
rosa="\033[35;1m"      # Rosa
vermelho="\033[31;1m"  # Vermelho

#----------------------------------------------!

#-----------------------(FUNÇÕES)

variavel_nula() {
	[ "$param1" ] || {
	  echo -e "\t$rosa Ops. Selecione uma música rapaz!$f"
	}
}

# agora o logo fica no centro!
centro() {
  local cent=$(tput cols)
  local centralizando=$(($cent/2))
  printf "\t%*s\n" $centralizando " M4L - PLAYER "
}

espectrum() (
# helice, executado em segundo plano,
# enquanto rola a música.
  while :; do
    for a in / - \\ \|; do
      echo -ne "\b$a"
    done
  done & "$@"
  kill $!
  echo
)

#-------------------------------!

#-----------------------(TESTES INICIAIS)

# mpg123 existe no sistema?
# se não existir instala vagabundo riaria
[ "$mpg_existe" ] || {
	echo -e "$vermelho\tVocê deve instalar o mpg123 para continuar.$f"
	exit 1
}

#---------------------------------------!

# Inicio programa
clear; centro   # chama logo do programa

while (true); do
   read -ep $'\033[34;1m| ♫ | \033[m' param param1
   case $param in

	#----Opções do player
	play|tocar)
	     variavel_nula  # sem música ?
	     espectrum eval $TOCADOR "$param1" 2>&- ;;

   	playlist)
	      read -ep $'\033[36;40;1mCaminho completo da pasta:\033[m\n' param1
              variavel_nula  # sem música ?
	      espectrum eval $TOCADOR "$param1"*.mp3 2>&- ;;

	#----Opções navegação
	licença|license) echo -e "$vermelho M4L is licensed under the GNU Lesser/Library General Public License, LGPL, version 2.1
 mpg123  is licensed under the GNU Lesser/Library General Public License, LGPL, version 2.1$f" ;;

	sair|quit) exit 0 ;;

	cd) cd $param1 ;;

	pwd) pwd ;;

	ls|lista) ls --color ;;

	*|ajuda|help)
	      echo -e "
$bold Comandos utilizados em linha:$f
  $vermelho cd$f = Para navegar até uma pasta específica
  $vermelho ls/lista$f = Para listar todos arquivos em uma pasta
  $vermelho pwd$f = Para saber em que diretório está.
  $vermelho play/tocar$f = Toca uma música, desde que esteja na pasta.
  $vermelho playlist$f = Selecione uma pasta com todas as músicas.
  $vermelho sair/quit$f = Para sair do M4L

$bold Funçoes do M4L:$f
  $vermelho q$f = Para sair da música/playlist.
  $vermelho ESPAÇO$f = Para pausar e voltar a música.
  $vermelho f$f = Próxima música.
  $vermelho d$f = Volta a música anterior.
  $vermelho +$f = Aumenta volume da música.
  $vermelho -$f = Diminui o volume da música.
  $vermelho .$f = Pula de 1 em 1 segundo.
  $vermelho ,$f = Volta musica de 1 em 1 segundo.
"
  esac
done # Fecha while principal
